package Controlador;


import java.util.*;

import javax.swing.*;

import Modelo.*;
import Vista.*;

public  class Controlador {
	
	   private VentanaPrincipal vista; 
	   private Juego juego;
	   private ArrayList<Accion> botonesDeAccion;
	   private JButton ultimoClickPrincipal;
	   private Casillero clickSecundarioInicial;
	   private NivelDeJuego nivelElegido;
	   private String mapaElegido;
	   
	   
	   
      public Controlador(VentanaPrincipal unaVista){
    	  this.vista = unaVista;
    	  this.vista.setControlador(this);
    	  this.juego = null;
    	  this.ultimoClickPrincipal = null;
    	  this.clickSecundarioInicial = null;
    	  this.botonesDeAccion = new ArrayList<Accion>();
    	  this.nivelElegido = null;
    	  this.mapaElegido = null;
      }
    
    public void agregarAccionResidencia(JButton botonAsignado){
    	AccionResidencia accion = new AccionResidencia(botonAsignado,this);
    	this.botonesDeAccion.add(accion);
    }
    
    public void agregarAccionRuta(JButton botonAsignado){
    	AccionRuta accion = new AccionRuta(botonAsignado,this);
    	this.botonesDeAccion.add(accion);
    }
  
	public void setVista(VentanaPrincipal vista){
          this.vista = vista;
      }
	public VentanaPrincipal devolverVentana(){
          return vista;
      }
    public Juego getJuego(){
    	return this.juego;
    }
      
    public void setUltimoClick(JButton boton){
    	  this.ultimoClickPrincipal = boton;
      }
    
    public JButton getUltimoClick(){
    	return this.ultimoClickPrincipal;
    }

	public void ejecutarAccionPrincipal(Casillero casillero) {
		
		boolean accionEncontrada = false;
		int i = 0;
		
		while ((i < this.botonesDeAccion.size())&& (!accionEncontrada)){
			if(this.ultimoClickPrincipal == this.botonesDeAccion.get(i).getIndicaAccion()){
				accionEncontrada = true;
				this.botonesDeAccion.get(i).accionPrimaria(casillero);
			}
			i++;
		}
	}

	public void agregarAccionCEolica(JButton botonAsignado) {
		AccionCEolica accion = new AccionCEolica(botonAsignado,this);
    	this.botonesDeAccion.add(accion);
		
	}

	public void agregarAccionIndustria(JButton botonAsignado) {
		AccionIndustria accion = new AccionIndustria(botonAsignado,this);
    	this.botonesDeAccion.add(accion);
	}
	
	public void agregarAccionCNuclear(JButton botonAsignado) {
		AccionCNuclear accion = new AccionCNuclear(botonAsignado,this);
    	this.botonesDeAccion.add(accion);
	}
	
	public void agregarAccionCMineral(JButton botonAsignado) {
		AccionCMineral accion = new AccionCMineral(botonAsignado,this);
    	this.botonesDeAccion.add(accion);
	}

	public void agregarAccionComercio(JButton botonAsignado) {
		AccionComercio accion = new AccionComercio(botonAsignado,this);
    	this.botonesDeAccion.add(accion);
		
	}

	public void agregarAccionBomberos(JButton botonAsignado) {
		AccionBomberos accion = new AccionBomberos(botonAsignado,this);
    	this.botonesDeAccion.add(accion);
		
	}

	public void agregarAccionPozoDeAgua(JButton botonAsignado) {
		AccionPozoDeAgua accion = new AccionPozoDeAgua(botonAsignado,this);
    	this.botonesDeAccion.add(accion);
		
	}

	public void agregarAccionLineaTension(JButton botonAsignado) {
		AccionLineaDeTension accion = new AccionLineaDeTension(botonAsignado,this);
    	this.botonesDeAccion.add(accion);
		
	}
	

	public void agregarAccionTuberia(JButton botonAsignado) {
		AccionTuberia accion = new AccionTuberia(botonAsignado,this);
    	this.botonesDeAccion.add(accion);
		
		
	}
	
	
	
	
	public void ejecutarAccionSecundaria(Casillero casillero) {
		
		boolean accionEncontrada = false;
		int i = 0;
		
		while ((i < this.botonesDeAccion.size())&& (!accionEncontrada)){
			if(this.ultimoClickPrincipal == this.botonesDeAccion.get(i).getIndicaAccion()){
				accionEncontrada = true;
				this.botonesDeAccion.get(i).accionSecundaria(casillero);
			}
			i++;
		}
		
		this.desmarcarClickSecundario();
		this.devolverVentana().actualizarVistaCasilleros();
	}

	public Casillero getClickSecundarioInicial() {
		
		return this.clickSecundarioInicial;
	}
	
	public void desmarcarClickSecundario(){
		
		if(this.getClickSecundarioInicial()!=null){
			
			this.getClickSecundarioInicial().setBorder((new JButton()).getBorder());
			this.setClickSecundarioInicial(null);
		}
	}
	public void setClickSecundarioInicial(Casillero nuevoClickSecundario) {
		this.clickSecundarioInicial = nuevoClickSecundario;
		
	}

	public void desmarcarClickPrimario() {
		if(this.getUltimoClick()!=null){
			this.getUltimoClick().setBackground((new JButton()).getBackground());
			this.setUltimoClick(null);
		}
	}

	public String obtenerNombreElegido() {

		return this.devolverVentana().obtenerVistaOpciones().obtenerNombreIngresado();
	}

	public NivelDeJuego obtenerNivelElegido() {
		
		return this.nivelElegido;
	}

	public String obtenerMapaElegido() {
		
		return this.mapaElegido;
	}
	
	public void modificarMapaElegido (String mapa) {

		this.mapaElegido = mapa;
	}
	
	public void modificarNivelElegido (NivelDeJuego nivel) {

		this.nivelElegido = nivel;
	}

	

	public void setJuego(Juego unJuego) {
		this.juego = unJuego;
		
	}


	
	
}

